/*!
 * 文件名称： main.c
 * 描    述： TIMER_RGB彩灯实验主函数文件
 * 版本：     2023-12-03, V1.0
*/

/*
* GD32F303东方红开发板V1.0
* 淘宝商城：   https://juwo.taobao.com
* 技术交流：   https://www.gd32bbs.com/ask/
* 视频学习：   https://space.bilibili.com/475462605
* 微信公众号： gd32bbs
* Copyright    苏州聚沃电子科技有限公司
* 版权所有，盗版必究。
*/

#include "gd32f30x.h"
#include <stdio.h>
#include "bsp_uart.h"
#include "bsp_led.h"
#include "bsp_rgb_pwm.h"
#include "bsp_timer.h"
#include "driver_public.h"

/*!
* 说明     RGB占空比切换函数（TIMER定时中断回调）
* 输入     无
* 输出     无
* 返回值   无
*/
void rgb_switch(void)
{   
    static  uint8_t r_duty=0,g_duty=0,b_duty=0;
    
    //每轮中断依次调整rgb占空比，将全部组合遍历    
    bsp_rgb_duty_set(r_duty,g_duty,b_duty);  
    
    b_duty+=5;
    if(b_duty>100) 
    {
        b_duty=0;
        g_duty+=5;
        if(g_duty>100) 
        {
            g_duty=0;
            r_duty+=5;            
            if(r_duty>100) 
            {
                r_duty=0;
                bsp_led_toggle(&LED0);
                bsp_led_toggle(&LED1);                  
            }
        }            
    }   
        
  
}
    
/*!
* 说明     main函数
* 输入     无
* 输出     无
* 返回值   无
*/
int main(void)
{
    //延时和公共驱动部分初始化
    driver_init(); 

    //打印串口初始化    
    bsp_uart_init(&BOARD_UART);
    
    //初始化LED组    
    bsp_led_group_init();  
    bsp_led_on(&LED0);
    bsp_led_off(&LED1);
   
    //初始化rgb通道相关MCU配置，计数器频率20M，周期值100，PWM频率对应为20M/100:200K        
    bsp_rgb_init(120000000,100);// 120M timer_cnt_ck,100 period，1.2M PWM CK    

    //注册rgb_switch函数到timer定时中断的回调函数    
    TIMER_INT.timer_updata_callback=rgb_switch;
    
    //初始化定时器，默认计数器频率100K,周期值3000,中断频率100K/3000= 33HZ（30ms）    
    bsp_timer_init(100000,3000);// 
    
    printf_log("\r\n RGB breathing lamp\r\n");
    
	while(1)
	{
       
	}
}







